package com.zmn.oms.third.base.util;

import com.zmn.common.constant.GlobalConsts;
import com.zmn.common.utils.date.DateUtil;
import com.zmn.oms.common.constant.OrderConsts;
import com.zmn.oms.model.dto.order.proxy.CreateOrderDTO;
import com.zmn.oms.model.dto.product.OrderProductDTO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;

import java.util.*;

/**
 * 类描述：
 *
 * @author LiangHailong
 * @date 2019/11/06 21:29
 */
public final class ThirdOrderUtil {

    /**
     * 私有构造器，禁止外部实例化
     */
    private ThirdOrderUtil(){}

    /**
     * 如果订单信息不完整导致无法正常保存订单（地址解析失败导致无法确定订单所在城市等情况），
     * 将重庆设置为默认城市，且将产品信息设置为“其他”，防止自动派单，交给人工处理
     * @param zmnOrder
     */
    public static void fillDefaultOrderInfo(CreateOrderDTO zmnOrder, String logRemark) {

        if (Objects.isNull(zmnOrder.getCityId())) {

            // 默认设为重庆
            zmnOrder.setCityId(500100);

            // 产品设置为其他
            OrderProductDTO productDTO = new OrderProductDTO();
            productDTO.setProductId(OrderConsts.CHANNEL_DISABLED_PRODUCT_ID);
            productDTO.setProductShowType(GlobalConsts.NO);

            List<OrderProductDTO> list = new LinkedList<>();
            list.add(productDTO);
            zmnOrder.setOrderProductList(list);
        }

        // 下单备注
        if (StringUtils.isNotBlank(logRemark)) {
            String remark = logRemark;
            if (zmnOrder.getOperatorLogRemark() != null) {
                remark = remark + zmnOrder.getOperatorLogRemark();
            }
            zmnOrder.setOperatorLogRemark(remark);
        }
    }

    /**
     * 判断订单中的地址，产品，客户联系电话是否完整
     * @param createOrderDTO
     * @return
     */
    public static boolean isOrderInfoIntact(CreateOrderDTO createOrderDTO) {
        if (createOrderDTO.getLongitude() == null || createOrderDTO.getLatitude() == null) {
            // 地址没解析出来
            return false;
        }

        if (CollectionUtils.isEmpty(createOrderDTO.getOrderProductList())) {
            // 没有产品数据
            return false;
        }

        OrderProductDTO orderProductDTO = createOrderDTO.getOrderProductList().get(0);
        Integer productId = orderProductDTO.getProductId();
        Integer showProductId = orderProductDTO.getShowProductId();
        if (Objects.equals(OrderConsts.CHANNEL_DISABLED_PRODUCT_ID, productId)
                || Objects.equals(OrderConsts.CHANNEL_DISABLED_PRODUCT_ID, showProductId)) {
            // 产品没解析出来，
            return false;
        }

        return true;
    }

    /**
     * 获取默认预约时间
     * 规则为：将当前时间作为参考时间：
     *  1.创建订单时间：0:00-8：00，默认当天9:00
     *  2.创建订单时间：8:00-19:00，默认下单时间后延1个小时
     *  3.创建订单时间：19:00-24:00，默认下单时间次日9:00
     * @return
     */
    public static Date getDefaultDutyTime() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        int defaultHour = 9;

        int currHour = calendar.get(Calendar.HOUR_OF_DAY);
        if (currHour < 8 || currHour >= 19) {
            calendar.set(Calendar.HOUR_OF_DAY, defaultHour);
            if (currHour >= 19) {
                calendar.add(Calendar.DATE, 1);
            }
        }
        else {
            calendar.add(Calendar.HOUR_OF_DAY, 1);
        }

        return calendar.getTime();
    }

}
